package com.polaris.live.ui.party.baishun

import android.app.Activity
import android.webkit.JavascriptInterface
import com.just.agentweb.AgentWeb
import com.polaris.live.common.util.JsonUtils
import com.polaris.live.common.util.LogExt
import com.polaris.live.resp.bean.BasishunGetConfigData
import com.polaris.live.resp.bean.GameLeisureBean
import com.polaris.live.ui.game.js.AbstractNativeJsBridgeProxy
import com.polaris.live.ui.party.listener.BaiShunListener
import org.json.JSONObject

/**
 * NativeBridge
 * @author Created by 天晴 on 2024/1/15 10:33
 * @since 1.0.0
 */
class BaiShunNativeBridge(
    activity: Activity,
    private val gameBean: GameLeisureBean,
    agent: AgentWeb,
    private val listener: BaiShunListener
) : AbstractNativeJsBridgeProxy(activity, agent) {

    @JavascriptInterface
    fun getConfig(params: String?) {
        listener.gameLoading()
        LogExt.logI("BSGAME", " 游戏调⽤ getConfig params:$params")
        try {
            val obj = JSONObject(params)
            val jsFunName = obj.optString("jsCallback")
            val configData = BasishunGetConfigData()
            configData.appChannel = gameBean.appChannel
            configData.appId = gameBean.appId
            configData.userId = gameBean.userId
            configData.code = gameBean.gameValidCode
            configData.roomId = gameBean.roomId
            configData.gameMode = gameBean.gameMode
            configData.language = gameBean.language
            configData.gameConfig.sceneMode = gameBean.sceneMode
            configData.gameConfig.currencyIcon = gameBean.currencyIcon
            configData.gsp = gameBean.gsp
            configData.role = gameBean.role

            val dataJson = JsonUtils.toJson(configData)
            LogExt.logI("BSGAME") {
                " 游戏调⽤ Gson: $dataJson"
            }
            setConfig(jsFunName, dataJson)
        } catch (ex: Exception) {
            LogExt.logI("getConfig ERROR", ex.message ?: "unknown")
        }
    }

    /**
     * destroy销毁游戏
     * 当游戏需要主动关闭时会通知APP，由APP关闭WebView。
     */
    @JavascriptInterface
    fun destroy(params: String?) {
        LogExt.logI("BSGAME", " 游戏调⽤ destroy")
        //关闭游戏TODO客⼾端
        listener.destroy()
    }

    /**
     * ameRecharge提⽰余额不⾜
     * 当游戏币不⾜或者点击⾦币图标时会通知APP，由APP打开商城⻚
     */
    @JavascriptInterface
    fun gameRecharge(params: String?) {
        LogExt.logI("BSGAME", " 游戏调⽤ gameRecharge")
        listener.recharge()
    }

    /**
     * gameLoaded游戏加载完
     * 当游戏加载完毕，展⽰游戏中画⾯时会通知APP。
     * PS:拉起游戏后，APP可以优先展⽰⾃⼰的加载动画，收到通知关闭加载动画）
     */
    @JavascriptInterface
    fun gameLoaded(params: String?) {
        LogExt.logI("BSGAME", " 游戏调⽤ gameLoaded")
        //游戏加载完毕TODO客⼾端
        listener.gameLoaded()
    }

    @JavascriptInterface
    fun sendGameAction(params: String) {
        val obj = JSONObject(params)
        val jsType = obj.optInt("type")
        listener.sendGameAction(jsType)
        LogExt.logI("BSGAME", "游戏调用sendGameAction  jsType:$jsType")
        when (jsType) {
            6 -> { // 拉起观众列表

            }

            7 -> { // 拉起玩家资料卡

            }

            8 -> { //  获取⽤户是否已关注 params:{userIds:[userId1xx,userId2xx]}

            }

            9 -> { // 关注⽤户

            }

            10 -> { // 拉起分享面板

            }

            11 -> { //回到APP准备页(组队页

            }

            12 -> { // 点击右上角关闭按钮

            }
        }
    }
}
